// 基本数据类型
// var 变量 = xxxx; // 变量 基本的数据类型和复杂数据类型的引用;
// 

// 复杂数据类型：内存不能直接存到变量里面，而是要再另外一个地方new出来
// 变量 保存 引用: 使用这个变量，能够访问到这个对象，对象的访问快捷方式;

// 很大的数据对象, var 变量 = 数据对象的一个访问的方式;

// 字符串就是一个复杂数据对象, str = 字符串对象 变量-->对象的引用;
var str = "HelloWorld testssssssssssss";
// str 存的是什么？？？？ 访问这个对象的快捷方式，引用;
// 门牌号码，使用这个门牌号码就能找到这户人家;
console.log(str);

str = 'helloworld'
console.log(str);


// 数组, 存放一组数据的, 
// 可以通过下标索引来访问;
var array_data = []; // []表示的是数组, 空的数组对象;
array_data = [1, 2, 3, 4] // 初始化了里面的元素
array_data = [1, true, "hello", [1, 2 ,3]] // 数组里面每个元素的类型可以不一样;
// 变量保存了数组对象的引用;
console.log(array_data);

// 0索引: 1, 1索引: 2, 2索引: 3
array_data = [1, 2, 3, "test_data type"];
console.log(array_data[0]); // --> 1
console.log(array_data[1]); // --> 2
console.log(array_data[2]); // --> 3;
console.log(array_data[3]); // "test_data type"
// 下标可以是常量，变量
var index = 3;
console.log(array_data[index]); // "test_data type"

// 访问数组的索引的时候，索引不要越界，不要超过了我们的长度，也不要< 0;
// 访问数组的时候，我们要做好控制;
console.log(array_data[4]);
console.log(typeof array_data[3]);

console.log('=========复杂结构：表===========');
var test_table = {}; // 定义了一个空的表;

test_table = {
	// key : 值
	age: 34,
	name: "Blake",
	phone_num: "18175133532",

	array_data2: [1, 2, 3, 4, {
		adrr: "127.0.0.1",
		port: 6080
	}],


	table_data: {
		ip_adress: "192.168.1.1",
		port: 7777,
	},

	test_array_data: array_data,
}

var test_table2 = {
	// key : 值
	age: 24,
	name: "Simon",
	phone_num: "13375133532",

	56: "566666666666666adrress",
}

console.log(typeof test_table);

// 表，可以存放所有的数据对象;
console.log(test_table);

// 表的访问
// (1) []
console.log(test_table2["age"]);
console.log(test_table2[56]);
console.log(test_table2["56"]);
// (2).  表.key;
console.log(test_table2.name,test_table2.age);
// console.log(test_table2.56);, 整数key，是不能用.来访问的

test_table2.xxxxx_key = 10000;
console.log(test_table2.xxxxx_key);

// 复杂的数据对象： 函数对象;
// 
// 代码逻辑，下次不需要再写了?
// 代码块，其他他的如果要使用，就调用这个代码块就好了，
// 代码块--> 函数;

console.log("=========复杂结构：表===========");
// 怎么样来定义一个函数

// 参数: 别人调用的时候传入的数据;
// 生成一个函数对象;
function func_name(lhs, rhs) { 
	// 编写代码，函数体
	console.log("line 106");
	console.log("func_name", lhs, rhs);
	console.log("line 108");

	// 返回语句，返回到调用函数的下一个语句;
	return;
}

// 函数调用: 函数名字(传入的参数, ....)
console.log("line 112");
func_name(3, 4);
console.log("line 113");
// 函数调用和跳转;

// 用户接收返回值:
function add(lhs, rhs) {
	// 返回了一个值
	return lhs + rhs;
}

// ret: 被用函数的返回值赋值了
var ret = add(3, 4);
console.log(ret);


// 函数的名字，就代表这个函数对象,可以用变量来存放函数对象引用;
var my_add = add;
ret = my_add(3, 4);
console.log(ret);

var math_tools = {
	add: add,


	func_key: function() {
		console.log("func_key");
	},
};

var ret = math_tools.add(3, 4);
console.log(ret);

math_tools.func_key();


var http = {
	get: function() {
		console.log("get");
	},

	set: function() {
		console.log("set");
		return 3
	},
};

// 没写一行代码是做什么用的，你要清楚的知道，我的哥
console.log(http.set());